package com.lewei.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.lewei.model.PrintInModel;

public class ExcelSGB05CN {
	/** 六位年月日 */
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");

	/** excel数据列 */
	// private static List<int[]> dataColum = new ArrayList<int[]>();
	// static {
	// // AA.AP
	// dataColum.add(new int[] { 0, 1, 11, 12, 14 });
	// // AMD
	// dataColum.add(new int[] { 0, 1, 10, 11, 13 });
	// // 35100
	// dataColum.add(new int[] { 0, 1, 9, 10, 19 });
	// // 35200
	// dataColum.add(new int[] { 0, 1, 9, 10, 19 });
	// // 35300
	// dataColum.add(new int[] { 0, 1, 8, 9, 12 });
	// // AMDDOP门机
	// dataColum.add(new int[] { 1, 4, 0, 8, 13 });
	// }

	/** 禁止实例化 */
	private ExcelSGB05CN() {
	};

	public static void main(String[] args) {
		File file = new File("C:\\toolsZ\\labelPrint\\modelNo\\SGB05.xlsx");
		try {
			List<PrintInModel> list = readExcel(file);
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 对外提供读取excel 的方法
	 */
	public static List<PrintInModel> readExcel(File file) throws IOException {
		String fileName = file.getName();

		String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
				.substring(fileName.lastIndexOf(".") + 1);
		if ("xls".equals(extension)) {
			return read2003Excel(file);
		} else if ("xlsx".equals(extension)) {
			return read2007Excel(file);
		} else {
			throw new IOException("不支持的文件类型");
		}
	}

	/**
	 * 读取 office 2003 excel
	 * 
	 * @throws IOException
	 * @throws FileNotFoundException
	 */
	@SuppressWarnings("deprecation")
	private static List<PrintInModel> read2003Excel(File file) throws IOException {
		List<PrintInModel> list = new ArrayList<PrintInModel>();
		HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
		HSSFSheet sheet = hwb.getSheetAt(0);
		HSSFRow row = null;
		HSSFCell cell = null;
		for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			// String sheetName = sheet.getSheetName();
			PrintInModel printInfo = new PrintInModel();

			String str = "";
			// 序列号/出厂编号(Serial-NO)
			cell = row.getCell(5);
			if (cell == null) {
				continue;
			}
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setSerialNo(str);

			// item(ElevatorNo)电梯号
			cell = row.getCell(9);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setElevator(str);

			// VS[拼接物料号]
			cell = row.getCell(14);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setOther(str);

			// type02标签样式[拼接物料号]
			cell = row.getCell(15);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setLabelType(str);

			// 数量
			cell = row.getCell(13);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setQuantity(str);

			// Vmax
			cell = row.getCell(22);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setvMax(str);

			// Fmax
			cell = row.getCell(23);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setfMax(str);

			// A
			cell = row.getCell(24);
			// if (cell == null) {
			// continue;itemCode
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setA(str);

			// 物料号
			cell = row.getCell(17);
			// if (cell == null) {
			// continue;
			// }
			cell.setCellType(CellType.STRING);
			str = cell.getStringCellValue().trim();
			printInfo.setItemCode(str);
			if (printInfo
					.getItemCode()
					.subSequence(printInfo.getItemCode().length() - 2,
							printInfo.getItemCode().length() - 1).equals("G")) {

				if (printInfo.getQuantity().equals("1")) {
					// 加入集合
					list.add(printInfo);
				} else { // 数量大于1
					int num = Integer.parseInt(printInfo.getQuantity());
					String serialNo = printInfo.getSerialNo();
					String serial = null;
					String no = null;
					String minNo = null;
					String maxNo = null;
                 	if(serialNo.contains("-")){
                 		//原逻辑
//                 		 serial=serialNo.substring(0,serialNo.indexOf("-"));
//                 		 System.out.println("输出序列号："+serial);
//                     	 no=serialNo.substring(serialNo.indexOf("-")+1);
//                     	 minNo=no.substring(0,no.indexOf("-"));
//                     	 maxNo=no.substring(no.indexOf("-")+1);
                 		
                 		//20190830更改
                 		minNo=serialNo.substring(0,serialNo.indexOf("-"));
                 		 System.out.println("输出序列号："+serial);
                 		
                 	}else if(serialNo.contains("_")){
                 		//原逻辑   serialNo的新格式   例： 新的：1903001006-1010  原来的：200085_348_349
//                 		serial=serialNo.substring(0,serialNo.indexOf("_"));
//                    	 no=serialNo.substring(serialNo.indexOf("_")+1);
//                    	 minNo=no.substring(0,no.indexOf("_"));
//                    	 maxNo=no.substring(no.indexOf("_")+1);
                 		//20190830更改   
                    	 minNo=serialNo.substring(0,serialNo.indexOf("_"));
                 	}
                 	Integer minNoNum=null;
                 	try{
                 		 minNoNum=Integer.parseInt(minNo);
                 	}catch(NumberFormatException e){
                 		e.getStackTrace();
                 		JOptionPane.showMessageDialog(null, "出厂编号格式错误");
                 		
                 	}
                	
                	for(int j=0;j<num;j++){
                		PrintInModel pi = new PrintInModel();
                		int noNum=minNoNum + j;
//                		//判断小于100的输出不是99而是099(加个0)
//                		if(noNum<100){
//                			if(noNum<10){
//                				serialNo=serial+"_"+"00"+noNum;
//                			}else{
//                 			serialNo=serial+"_"+"0"+noNum;
//                			}
//                 		}else{
//                 			serialNo=serial+"_"+noNum;
//                 		}
//                		
                		serialNo=noNum+"";
                		pi.setCustomer(printInfo.getCustomer());// 客户
						pi.setSerialNo(serialNo);// 序列号
						pi.setItemCode(printInfo.getItemCode());// 初始订单号
						pi.setItemDesc(printInfo.getItemDesc());// SGB05安全钳10mm下提拉oiled
						pi.setLabelType(printInfo.getLabelType());// GGU=1667,VKN=1
					    pi.setA(printInfo.getA());//a
	                    pi.setfMax(printInfo.getfMax());//fmax
	                    pi.setvMax(printInfo.getvMax());//vmax
	                    pi.setElevator(printInfo.getElevator());//电梯号
						pi.setOrderNo(printInfo.getOrderNo());// 订单号
						pi.setOther(printInfo.getOther());// 1026933A52LGS
															// 实际交货日列
						pi.setQuantity(printInfo.getQuantity());// 数量
                		// 加入集合
        				list.add(pi);
                	}
				}
			}
		}
		hwb.close();
		return list;
	}

	/**
	 * 读取Office 2007 excel
	 */
	@SuppressWarnings("deprecation")
	private static List<PrintInModel> read2007Excel(File file) {
		try {
			List<PrintInModel> list = new ArrayList<PrintInModel>();
			// 构造 XSSFWorkbook 对象，strPath 传入文件路径
			XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
			// 读取第一章表格内容
			XSSFSheet sheet = xwb.getSheetAt(0);
			XSSFRow row = null;
			XSSFCell cell = null;
			for (int i = 1; i <= sheet.getPhysicalNumberOfRows(); i++) {
				row = sheet.getRow(i);
				if (row == null) {
					continue;
				}
				PrintInModel printInfo = new PrintInModel();

				String str = "";
				// 序列号/出厂编号(Serial-NO)
				cell = row.getCell(5);
				if (cell == null) {
					continue;
				}
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setSerialNo(str);

				// item(ElevatorNo)电梯号
				cell = row.getCell(9);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setElevator(str);

				// VS[拼接物料号]
				cell = row.getCell(14);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setOther(str);

				// type02标签样式[拼接物料号]
				cell = row.getCell(15);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setLabelType(str);

				// 数量
				cell = row.getCell(13);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setQuantity(str);

				// Vmax
				cell = row.getCell(22);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setvMax(str);

				// Fmax
				cell = row.getCell(23);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setfMax(str);

				// A
				cell = row.getCell(24);
				// if (cell == null) {
				// continue;itemCode
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setA(str);

				// 物料号
				cell = row.getCell(17);
				// if (cell == null) {
				// continue;
				// }
				cell.setCellType(CellType.STRING);
				str = cell.getStringCellValue().trim();
				printInfo.setItemCode(str);

				System.out.println(printInfo.getItemCode().subSequence(
						printInfo.getItemCode().length() - 2,
						printInfo.getItemCode().length() - 1));
				if (printInfo.getItemCode().subSequence(printInfo.getItemCode().length() - 2,printInfo.getItemCode().length() - 1).equals("G")) {

					if (printInfo.getQuantity().equals("1")) {
						// 加入集合
						list.add(printInfo);
					} else {
						int num = Integer.parseInt(printInfo.getQuantity());
						String serialNo = printInfo.getSerialNo();
						String serial = null;
						String no = null;
						String minNo = null;
						String maxNo = null;
						if(serialNo.contains("-")){
	                 		//原逻辑
//	                 		 serial=serialNo.substring(0,serialNo.indexOf("-"));
//	                 		 System.out.println("输出序列号："+serial);
//	                     	 no=serialNo.substring(serialNo.indexOf("-")+1);
//	                     	 minNo=no.substring(0,no.indexOf("-"));
//	                     	 maxNo=no.substring(no.indexOf("-")+1);
	                 		
	                 		//20190830更改
	                 		minNo=serialNo.substring(0,serialNo.indexOf("-"));
	                 		 System.out.println("输出序列号："+serial);
	                 		
	                 	}else if(serialNo.contains("_")){
	                 		//原逻辑   serialNo的新格式   例： 新的：1903001006-1010  原来的：200085_348_349
//	                 		serial=serialNo.substring(0,serialNo.indexOf("_"));
//	                    	 no=serialNo.substring(serialNo.indexOf("_")+1);
//	                    	 minNo=no.substring(0,no.indexOf("_"));
//	                    	 maxNo=no.substring(no.indexOf("_")+1);
	                 		//20190830更改   
	                    	 minNo=serialNo.substring(0,serialNo.indexOf("_"));
	                 	}
	                 	Integer minNoNum=null;
	                 	try{
	                 		 minNoNum=Integer.parseInt(minNo);
	                 	}catch(NumberFormatException e){
	                 		e.getStackTrace();
	                 		JOptionPane.showMessageDialog(null, "出厂编号格式错误");
	                 		
	                 	}
	                	
	                	for(int j=0;j<num;j++){
	                		PrintInModel pi = new PrintInModel();
	                		int noNum=minNoNum + j;
//	                		//判断小于100的输出不是99而是099(加个0)
//	                		if(noNum<100){
//	                			if(noNum<10){
//	                				serialNo=serial+"_"+"00"+noNum;
//	                			}else{
//	                 			serialNo=serial+"_"+"0"+noNum;
//	                			}
//	                 		}else{
//	                 			serialNo=serial+"_"+noNum;
//	                 		}
//	                		
	                		serialNo=noNum+"";
	                		pi.setCustomer(printInfo.getCustomer());// 客户
							pi.setSerialNo(serialNo);// 序列号
							pi.setItemCode(printInfo.getItemCode());// 初始订单号
							pi.setItemDesc(printInfo.getItemDesc());// SGB05安全钳10mm下提拉oiled
							pi.setLabelType(printInfo.getLabelType());// GGU=1667,VKN=1
						    pi.setA(printInfo.getA());//a
		                    pi.setfMax(printInfo.getfMax());//fmax
		                    pi.setvMax(printInfo.getvMax());//vmax
		                    pi.setElevator(printInfo.getElevator());//电梯号
							pi.setOrderNo(printInfo.getOrderNo());// 订单号
							pi.setOther(printInfo.getOther());// 1026933A52LGS
																// 实际交货日列
							pi.setQuantity(printInfo.getQuantity());// 数量
	                		// 加入集合
	        				list.add(pi);
	                	}

					}
				}

			}
			xwb.close();
			return list;
		} catch (NumberFormatException e) {
			e.printStackTrace();
			throw new RuntimeException("excel数据格式错误！");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("找不到文件！");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("找不到文件！");
		}
	}
}
